package com.shujia.core

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

object Demo16Cartesian {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf()
    conf.setAppName("Demo16Cartesian")
    conf.setMaster("local")

    val sc: SparkContext = new SparkContext(conf)

    val kvRDD1: RDD[(String, Int)] = sc.parallelize(List[(String, Int)]("k1" -> 1, "k2" -> 2, "k3" -> 3))
    val kvRDD2: RDD[(String, Int)] = sc.parallelize(List[(String, Int)]("k2" -> 22, "k3" -> 33, "k4" -> 44, "k5" -> 55))

    // cartesian 对两个RDD做笛卡尔积（将RDD1中的每一条数据与RDD2中的每一条数据进行关联）
    /**
     * 什么情况下会发生笛卡尔积？
     * 1、手动调用cartesian算子
     * 2、当两份数据关联时 有很多重复的数据 （注意：在关联时一定要注意关联条件会不会重复）
     */

    kvRDD1.cartesian(kvRDD2).foreach(println)

  }

}
